package com.example.testhilt.module

import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.components.ActivityComponent
import dagger.hilt.android.components.ApplicationComponent
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import java.util.concurrent.TimeUnit
import javax.inject.Singleton

/**
 ********************************************************
 *Author: chinadragon
 *Time: 2020/11/24 2:28 PM
 *Name:
 *Overview:
 *
 *  第三方类的依赖注入
 *
 *  Hilt内置组件和组件作用域
 *
 *Usage:
 ********************************************************
 */

/*
    其实这个注解的名字起得还是相当准确的，InstallIn，就是安装到的意思。
    那么@InstallIn(ActivityComponent::class)，就是把这个模块安装到Activity组件当中。
 */


@Module
//@InstallIn(ActivityComponent::class)
@InstallIn(ApplicationComponent::class)//如果我们希望刚才在NetworkModule中提供的Retrofit实例也能在Service中进行依赖注入，只需要这样修改就可以了：
class NetworkModule {

    @Singleton // 在全局都只会存在一份实例了。
    @Provides
    fun provideOkHttpClient():OkHttpClient{
        return OkHttpClient.Builder()
                .connectTimeout(20,TimeUnit.SECONDS)
                .readTimeout(20,TimeUnit.SECONDS)
                .writeTimeout(20,TimeUnit.SECONDS)
                .build()
    }

    @Singleton // 在全局都只会存在一份实例了。
    @Provides
    fun provideRetrofit(okHttpClient: OkHttpClient):Retrofit{
        return Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl("https://www.apiopen.top/novelApi")
                .client(okHttpClient)
                .build()
    }
}